
public class ListaSimple {
	private Nodo primero;
	private Nodo ultimo;
	public void annadirPrincipio(Object nuevo){
		if(primero==null){
			primero= new Nodo(null, nuevo);
			ultimo= primero;
		}
		else{
			Nodo nu= new Nodo(null, nuevo);
			Nodo aux= primero;
			nu.setSiguiente(aux);
			primero=nu;
			
		}
	}
	public void annadirFinal(Object dato){
		if(primero==null){
			primero= new Nodo(null, dato);
			ultimo=primero;
		}else{
			ultimo.setSiguiente(new Nodo(null, dato));
			ultimo= ultimo.getSiguiente();
		}
	}
	public boolean eliminarPos(int posicion){
		if(posicion==0){
			return eliminarInicio();
		}
		int tammaño= size();
		if(tammaño-1>posicion){
			return false;
		}else if(tammaño-1==posicion){
			return eliminarFinal();
		}else{
			Nodo aux=primero;
			Nodo anterior=null;
			int cont = 0;
			while(aux!=null){
				if(posicion==cont){
					anterior.setSiguiente(aux.getSiguiente());
					return true;
				}
				anterior=aux;
				aux=aux.getSiguiente();
				cont++;
			}
		}
		return false;
	}
			
		
	
	public boolean eliminarObj(Object obj){
		return true;
	}
	public void clear(){}
	
	public boolean eliminarInicio(){
		if(primero==null){
			return false;
		}else{
			primero= primero.getSiguiente();
			return true;
		}
	}
	public int size(){
		if(primero==null){
			return 0;
		}else{
			Nodo aux=primero;
			int cont=0;
			while(aux!=null){
				aux=aux.getSiguiente();
				cont++;
			}
			return cont;
		}
	}
	public boolean eliminarFinal(){
		if(primero==null){
			return false;
		}else{
			Nodo anterior = null;
			Nodo aux=primero;
			while(aux!=null){
				anterior=aux;
				aux=aux.getSiguiente();
			}
			anterior.setSiguiente(null);
			ultimo=anterior;
			return true;
		}
	}
	public ListaSimple invertirListaIterativo(){
		if(primero!=null){
			ListaSimple invertida= new ListaSimple();
			Nodo aux=primero;
			while(aux!=null){
				invertida.annadirPrincipio(aux.getDato());
				aux=aux.getSiguiente();
			}
			return invertida;
			
		}
		
		return null;
	}
	public void imprimeLista(){
		if(primero!=null){
			Nodo aux= primero;
			while(aux!=null){
				System.out.println(aux.getDato());
				aux= aux.getSiguiente();
			}
		}
	}
	public ListaSimple invertirListaRecursivo(){
		if(primero!=null){
			return invertirListaR(primero, new ListaSimple());
		}
		return null;
	}
	private ListaSimple invertirListaR(Nodo actual, ListaSimple lista){
		if(actual==null){
			return lista;
		}else{
			lista.annadirPrincipio(actual.getDato());
			return invertirListaR(actual.getSiguiente(), lista);
		}
	}
	public Object obtenerDatoPos(int pos){
		if(primero!=null){
			int tam= size();
			Nodo aux=primero;
			int cont=0;
			while(aux!=null){
				if(cont==pos){
					return aux.getDato();
				}
				cont++;
				aux=aux.getSiguiente();
			}
		}
		return null;
	}
	boolean esPalindrome(){
		if(primero!=null){
			Nodo aux=primero;
			int tam=size();
			tam--;
			int cont=0;
			while(aux!=null){
				System.out.println(aux.getDato()+"y"+obtenerDatoPos(tam));
				if(!aux.getDato().equals(obtenerDatoPos(tam))){
					System.out.println(cont);
					return false;
				}
				aux=aux.getSiguiente();
				tam--;
				cont++;
			}
			return true;
		}
		return false;
	}
}
